home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
DJGPP
/
DJSRC111.ZIP
/
utils
/
djtart.c
next >
Wrap
C/C++ Source or Header
|
1993-06-30
|
2KB
|
89 lines
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>
#include <io.h>
#include <dos.h>
#include <time.h>
#include "oread.h"
void Fatal(char *msg)
{
fprintf(stderr, "Fatal! %s!\n", msg);
exit(1);
}
/*------------------------------------------------------------------------*/
int v_switch = 0;
main(int argc, char **argv)
{
int i = 1;
for (; i < argc; i++)
{
if (strcmp(argv[i], "-v") == 0)
v_switch = 1 - v_switch;
else
tarlist(argv[i]);
}
}
/*------------------------------------------------------------------------*/
typedef struct {
char name[100];
char operm[8];
char ouid[8];
char ogid[8];
char osize[11];
char otime[12];
char ocsum[8];
char flags[2];
char filler[355];
} TARREC;
char buf[512];
tarlist(char *fname)
{
TARREC header;
int r;
void *f;
long perm, uid, gid, size, ftime, csum, posn=0;
int dsize;
char *changed_name;
struct tm *ltm;
f = oread_open(fname);
while (1)
{
oread_read(f, &header);
if (header.name[0] == 0)
break;
sscanf(header.operm, "%lo", &perm);
sscanf(header.ouid, "%lo", &uid);
sscanf(header.ogid, "%lo", &gid);
sscanf(header.osize, "%lo", &size);
sscanf(header.otime, "%lo", &ftime);
if (v_switch)
printf("%08lx %6lo ", posn, perm);
else
printf("%c%c%c%c ",
perm & 040000 ? 'd' : '-',
perm & 000400 ? 'r' : '-',
perm & 000200 ? 'w' : '-',
perm & 000100 ? 'x' : '-');
printf("%.20s %9ld %s", ctime(&ftime)+4, size, header.name, posn);
if (header.flags[1] == 0x32)
printf(" -> %s", header.filler);
printf("\n");
oread_skip(f, (size+511) & ~511);
posn += 512 + (size+511) & ~511;
}
oread_close(f);
}